<!doctype html>
<html>
<head>
<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>
<title>project-day02</title><style type='text/css'>html {overflow-x: initial !important;}:root { --node-fill: #ECECFF; --node-border: #CCCCFF; --cluster-fill: #ffffde; --cluster-border: #aaaa33; --note-fill: #fff5ad; --note-border: #aaaa33; --mermaid-color: var(--text-color); }


:root { --bg-color:#ffffff; --text-color:#333333; --select-text-bg-color:#B5D6FC; --select-text-font-color:auto; --monospace:"Lucida Console",Consolas,"Courier",monospace; --title-bar-height:20px; }
.mac-os-11 { --title-bar-height:28px; }
html { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; }
body { margin: 0px; padding: 0px; height: auto; bottom: 0px; top: 0px; left: 0px; right: 0px; font-size: 1rem; line-height: 1.42857; overflow-x: hidden; background: inherit; tab-size: 4; }
iframe { margin: auto; }
a.url { word-break: break-all; }
a:active, a:hover { outline: 0px; }
.in-text-selection, ::selection { text-shadow: none; background: var(--select-text-bg-color); color: var(--select-text-font-color); }
#write { margin: 0px auto; height: auto; width: inherit; word-break: normal; overflow-wrap: break-word; position: relative; white-space: normal; overflow-x: visible; padding-top: 36px; }
#write.first-line-indent p { text-indent: 2em; }
#write.first-line-indent li p, #write.first-line-indent p * { text-indent: 0px; }
#write.first-line-indent li { margin-left: 2em; }
.for-image #write { padding-left: 8px; padding-right: 8px; }
body.typora-export { padding-left: 30px; padding-right: 30px; }
.typora-export .footnote-line, .typora-export li, .typora-export p { white-space: pre-wrap; }
.typora-export .task-list-item input { pointer-events: none; }
@media screen and (max-width: 500px) {
  body.typora-export { padding-left: 0px; padding-right: 0px; }
  #write { padding-left: 20px; padding-right: 20px; }
  .CodeMirror-sizer { margin-left: 0px !important; }
  .CodeMirror-gutters { display: none !important; }
}
#write li > figure:last-child { margin-bottom: 0.5rem; }
#write ol, #write ul { position: relative; }
img { max-width: 100%; vertical-align: middle; image-orientation: from-image; }
button, input, select, textarea { color: inherit; font: inherit; }
input[type="checkbox"], input[type="radio"] { line-height: normal; padding: 0px; }
*, ::after, ::before { box-sizing: border-box; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p, #write pre { width: inherit; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p { position: relative; }
p { line-height: inherit; }
h1, h2, h3, h4, h5, h6 { break-after: avoid-page; break-inside: avoid; orphans: 4; }
p { orphans: 4; }
h1 { font-size: 2rem; }
h2 { font-size: 1.8rem; }
h3 { font-size: 1.6rem; }
h4 { font-size: 1.4rem; }
h5 { font-size: 1.2rem; }
h6 { font-size: 1rem; }
.md-math-block, .md-rawblock, h1, h2, h3, h4, h5, h6, p { margin-top: 1rem; margin-bottom: 1rem; }
.hidden { display: none; }
.md-blockmeta { color: rgb(204, 204, 204); font-weight: 700; font-style: italic; }
a { cursor: pointer; }
sup.md-footnote { padding: 2px 4px; background-color: rgba(238, 238, 238, 0.7); color: rgb(85, 85, 85); border-radius: 4px; cursor: pointer; }
sup.md-footnote a, sup.md-footnote a:hover { color: inherit; text-transform: inherit; text-decoration: inherit; }
#write input[type="checkbox"] { cursor: pointer; width: inherit; height: inherit; }
figure { overflow-x: auto; margin: 1.2em 0px; max-width: calc(100% + 16px); padding: 0px; }
figure > table { margin: 0px; }
tr { break-inside: avoid; break-after: auto; }
thead { display: table-header-group; }
table { border-collapse: collapse; border-spacing: 0px; width: 100%; overflow: auto; break-inside: auto; text-align: left; }
table.md-table td { min-width: 32px; }
.CodeMirror-gutters { border-right: 0px; background-color: inherit; }
.CodeMirror-linenumber { user-select: none; }
.CodeMirror { text-align: left; }
.CodeMirror-placeholder { opacity: 0.3; }
.CodeMirror pre { padding: 0px 4px; }
.CodeMirror-lines { padding: 0px; }
div.hr:focus { cursor: none; }
#write pre { white-space: pre-wrap; }
#write.fences-no-line-wrapping pre { white-space: pre; }
#write pre.ty-contain-cm { white-space: normal; }
.CodeMirror-gutters { margin-right: 4px; }
.md-fences { font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; overflow: visible; white-space: pre; background: inherit; position: relative !important; }
.md-diagram-panel { width: 100%; margin-top: 10px; text-align: center; padding-top: 0px; padding-bottom: 8px; overflow-x: auto; }
#write .md-fences.mock-cm { white-space: pre-wrap; }
.md-fences.md-fences-with-lineno { padding-left: 0px; }
#write.fences-no-line-wrapping .md-fences.mock-cm { white-space: pre; overflow-x: auto; }
.md-fences.mock-cm.md-fences-with-lineno { padding-left: 8px; }
.CodeMirror-line, twitterwidget { break-inside: avoid; }
.footnotes { opacity: 0.8; font-size: 0.9rem; margin-top: 1em; margin-bottom: 1em; }
.footnotes + .footnotes { margin-top: 0px; }
.md-reset { margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: top; background: 0px 0px; text-decoration: none; text-shadow: none; float: none; position: static; width: auto; height: auto; white-space: nowrap; cursor: inherit; -webkit-tap-highlight-color: transparent; line-height: normal; font-weight: 400; text-align: left; box-sizing: content-box; direction: ltr; }
li div { padding-top: 0px; }
blockquote { margin: 1rem 0px; }
li .mathjax-block, li p { margin: 0.5rem 0px; }
li blockquote { margin: 1rem 0px; }
li { margin: 0px; position: relative; }
blockquote > :last-child { margin-bottom: 0px; }
blockquote > :first-child, li > :first-child { margin-top: 0px; }
.footnotes-area { color: rgb(136, 136, 136); margin-top: 0.714rem; padding-bottom: 0.143rem; white-space: normal; }
#write .footnote-line { white-space: pre-wrap; }
@media print {
  body, html { border: 1px solid transparent; height: 99%; break-after: avoid; break-before: avoid; font-variant-ligatures: no-common-ligatures; }
  #write { margin-top: 0px; padding-top: 0px; border-color: transparent !important; }
  .typora-export * { -webkit-print-color-adjust: exact; }
  .typora-export #write { break-after: avoid; }
  .typora-export #write::after { height: 0px; }
  .is-mac table { break-inside: avoid; }
}
.footnote-line { margin-top: 0.714em; font-size: 0.7em; }
a img, img a { cursor: pointer; }
pre.md-meta-block { font-size: 0.8rem; min-height: 0.8rem; white-space: pre-wrap; background: rgb(204, 204, 204); display: block; overflow-x: hidden; }
p > .md-image:only-child:not(.md-img-error) img, p > img:only-child { display: block; margin: auto; }
#write.first-line-indent p > .md-image:only-child:not(.md-img-error) img { left: -2em; position: relative; }
p > .md-image:only-child { display: inline-block; width: 100%; }
#write .MathJax_Display { margin: 0.8em 0px 0px; }
.md-math-block { width: 100%; }
.md-math-block:not(:empty)::after { display: none; }
.MathJax_ref { fill: currentcolor; }
[contenteditable="true"]:active, [contenteditable="true"]:focus, [contenteditable="false"]:active, [contenteditable="false"]:focus { outline: 0px; box-shadow: none; }
.md-task-list-item { position: relative; list-style-type: none; }
.task-list-item.md-task-list-item { padding-left: 0px; }
.md-task-list-item > input { position: absolute; top: 0px; left: 0px; margin-left: -1.2em; margin-top: calc(1em - 10px); border: none; }
.math { font-size: 1rem; }
.md-toc { min-height: 3.58rem; position: relative; font-size: 0.9rem; border-radius: 10px; }
.md-toc-content { position: relative; margin-left: 0px; }
.md-toc-content::after, .md-toc::after { display: none; }
.md-toc-item { display: block; color: rgb(65, 131, 196); }
.md-toc-item a { text-decoration: none; }
.md-toc-inner:hover { text-decoration: underline; }
.md-toc-inner { display: inline-block; cursor: pointer; }
.md-toc-h1 .md-toc-inner { margin-left: 0px; font-weight: 700; }
.md-toc-h2 .md-toc-inner { margin-left: 2em; }
.md-toc-h3 .md-toc-inner { margin-left: 4em; }
.md-toc-h4 .md-toc-inner { margin-left: 6em; }
.md-toc-h5 .md-toc-inner { margin-left: 8em; }
.md-toc-h6 .md-toc-inner { margin-left: 10em; }
@media screen and (max-width: 48em) {
  .md-toc-h3 .md-toc-inner { margin-left: 3.5em; }
  .md-toc-h4 .md-toc-inner { margin-left: 5em; }
  .md-toc-h5 .md-toc-inner { margin-left: 6.5em; }
  .md-toc-h6 .md-toc-inner { margin-left: 8em; }
}
a.md-toc-inner { font-size: inherit; font-style: inherit; font-weight: inherit; line-height: inherit; }
.footnote-line a:not(.reversefootnote) { color: inherit; }
.md-attr { display: none; }
.md-fn-count::after { content: "."; }
code, pre, samp, tt { font-family: var(--monospace); }
kbd { margin: 0px 0.1em; padding: 0.1em 0.6em; font-size: 0.8em; color: rgb(36, 39, 41); background: rgb(255, 255, 255); border: 1px solid rgb(173, 179, 185); border-radius: 3px; box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; white-space: nowrap; vertical-align: middle; }
.md-comment { color: rgb(162, 127, 3); opacity: 0.8; font-family: var(--monospace); }
code { text-align: left; vertical-align: initial; }
a.md-print-anchor { white-space: pre !important; border-width: initial !important; border-style: none !important; border-color: initial !important; display: inline-block !important; position: absolute !important; width: 1px !important; right: 0px !important; outline: 0px !important; background: 0px 0px !important; text-decoration: initial !important; text-shadow: initial !important; }
.md-inline-math .MathJax_SVG .noError { display: none !important; }
.html-for-mac .inline-math-svg .MathJax_SVG { vertical-align: 0.2px; }
.md-math-block .MathJax_SVG_Display { text-align: center; margin: 0px; position: relative; text-indent: 0px; max-width: none; max-height: none; min-height: 0px; min-width: 100%; width: auto; overflow-y: hidden; display: block !important; }
.MathJax_SVG_Display, .md-inline-math .MathJax_SVG_Display { width: auto; margin: inherit; display: inline-block !important; }
.MathJax_SVG .MJX-monospace { font-family: var(--monospace); }
.MathJax_SVG .MJX-sans-serif { font-family: sans-serif; }
.MathJax_SVG { display: inline; font-style: normal; font-weight: 400; line-height: normal; zoom: 90%; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; }
.MathJax_SVG * { transition: none 0s ease 0s; }
.MathJax_SVG_Display svg { vertical-align: middle !important; margin-bottom: 0px !important; margin-top: 0px !important; }
.os-windows.monocolor-emoji .md-emoji { font-family: "Segoe UI Symbol", sans-serif; }
.md-diagram-panel > svg { max-width: 100%; }
[lang="flow"] svg, [lang="mermaid"] svg { max-width: 100%; height: auto; }
[lang="mermaid"] .node text { font-size: 1rem; }
table tr th { border-bottom: 0px; }
video { max-width: 100%; display: block; margin: 0px auto; }
iframe { max-width: 100%; width: 100%; border: none; }
.highlight td, .highlight tr { border: 0px; }
mark { background: rgb(255, 255, 0); color: rgb(0, 0, 0); }
.md-html-inline .md-plain, .md-html-inline strong, mark .md-inline-math, mark strong { color: inherit; }
mark .md-meta { color: rgb(0, 0, 0); opacity: 0.3 !important; }
@media print {
  .typora-export h1, .typora-export h2, .typora-export h3, .typora-export h4, .typora-export h5, .typora-export h6 { break-inside: avoid; }
}
.md-diagram-panel .messageText { stroke: none !important; }
.md-diagram-panel .start-state { fill: var(--node-fill); }
.md-diagram-panel .edgeLabel rect { opacity: 1 !important; }
.md-require-zoom-fix foreignobject { font-size: var(--mermaid-font-zoom); }


.CodeMirror { height: auto; }
.CodeMirror.cm-s-inner { background: inherit; }
.CodeMirror-scroll { overflow: auto hidden; z-index: 3; }
.CodeMirror-gutter-filler, .CodeMirror-scrollbar-filler { background-color: rgb(255, 255, 255); }
.CodeMirror-gutters { border-right: 1px solid rgb(221, 221, 221); background: inherit; white-space: nowrap; }
.CodeMirror-linenumber { padding: 0px 3px 0px 5px; text-align: right; color: rgb(153, 153, 153); }
.cm-s-inner .cm-keyword { color: rgb(119, 0, 136); }
.cm-s-inner .cm-atom, .cm-s-inner.cm-atom { color: rgb(34, 17, 153); }
.cm-s-inner .cm-number { color: rgb(17, 102, 68); }
.cm-s-inner .cm-def { color: rgb(0, 0, 255); }
.cm-s-inner .cm-variable { color: rgb(0, 0, 0); }
.cm-s-inner .cm-variable-2 { color: rgb(0, 85, 170); }
.cm-s-inner .cm-variable-3 { color: rgb(0, 136, 85); }
.cm-s-inner .cm-string { color: rgb(170, 17, 17); }
.cm-s-inner .cm-property { color: rgb(0, 0, 0); }
.cm-s-inner .cm-operator { color: rgb(152, 26, 26); }
.cm-s-inner .cm-comment, .cm-s-inner.cm-comment { color: rgb(170, 85, 0); }
.cm-s-inner .cm-string-2 { color: rgb(255, 85, 0); }
.cm-s-inner .cm-meta { color: rgb(85, 85, 85); }
.cm-s-inner .cm-qualifier { color: rgb(85, 85, 85); }
.cm-s-inner .cm-builtin { color: rgb(51, 0, 170); }
.cm-s-inner .cm-bracket { color: rgb(153, 153, 119); }
.cm-s-inner .cm-tag { color: rgb(17, 119, 0); }
.cm-s-inner .cm-attribute { color: rgb(0, 0, 204); }
.cm-s-inner .cm-header, .cm-s-inner.cm-header { color: rgb(0, 0, 255); }
.cm-s-inner .cm-quote, .cm-s-inner.cm-quote { color: rgb(0, 153, 0); }
.cm-s-inner .cm-hr, .cm-s-inner.cm-hr { color: rgb(153, 153, 153); }
.cm-s-inner .cm-link, .cm-s-inner.cm-link { color: rgb(0, 0, 204); }
.cm-negative { color: rgb(221, 68, 68); }
.cm-positive { color: rgb(34, 153, 34); }
.cm-header, .cm-strong { font-weight: 700; }
.cm-del { text-decoration: line-through; }
.cm-em { font-style: italic; }
.cm-link { text-decoration: underline; }
.cm-error { color: red; }
.cm-invalidchar { color: red; }
.cm-constant { color: rgb(38, 139, 210); }
.cm-defined { color: rgb(181, 137, 0); }
div.CodeMirror span.CodeMirror-matchingbracket { color: rgb(0, 255, 0); }
div.CodeMirror span.CodeMirror-nonmatchingbracket { color: rgb(255, 34, 34); }
.cm-s-inner .CodeMirror-activeline-background { background: inherit; }
.CodeMirror { position: relative; overflow: hidden; }
.CodeMirror-scroll { height: 100%; outline: 0px; position: relative; box-sizing: content-box; background: inherit; }
.CodeMirror-sizer { position: relative; }
.CodeMirror-gutter-filler, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-vscrollbar { position: absolute; z-index: 6; display: none; }
.CodeMirror-vscrollbar { right: 0px; top: 0px; overflow: hidden; }
.CodeMirror-hscrollbar { bottom: 0px; left: 0px; overflow: hidden; }
.CodeMirror-scrollbar-filler { right: 0px; bottom: 0px; }
.CodeMirror-gutter-filler { left: 0px; bottom: 0px; }
.CodeMirror-gutters { position: absolute; left: 0px; top: 0px; padding-bottom: 30px; z-index: 3; }
.CodeMirror-gutter { white-space: normal; height: 100%; box-sizing: content-box; padding-bottom: 30px; margin-bottom: -32px; display: inline-block; }
.CodeMirror-gutter-wrapper { position: absolute; z-index: 4; background: 0px 0px !important; border: none !important; }
.CodeMirror-gutter-background { position: absolute; top: 0px; bottom: 0px; z-index: 4; }
.CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; }
.CodeMirror-lines { cursor: text; }
.CodeMirror pre { border-radius: 0px; border-width: 0px; background: 0px 0px; font-family: inherit; font-size: inherit; margin: 0px; white-space: pre; overflow-wrap: normal; color: inherit; z-index: 2; position: relative; overflow: visible; }
.CodeMirror-wrap pre { overflow-wrap: break-word; white-space: pre-wrap; word-break: normal; }
.CodeMirror-code pre { border-right: 30px solid transparent; width: fit-content; }
.CodeMirror-wrap .CodeMirror-code pre { border-right: none; width: auto; }
.CodeMirror-linebackground { position: absolute; left: 0px; right: 0px; top: 0px; bottom: 0px; z-index: 0; }
.CodeMirror-linewidget { position: relative; z-index: 2; overflow: auto; }
.CodeMirror-wrap .CodeMirror-scroll { overflow-x: hidden; }
.CodeMirror-measure { position: absolute; width: 100%; height: 0px; overflow: hidden; visibility: hidden; }
.CodeMirror-measure pre { position: static; }
.CodeMirror div.CodeMirror-cursor { position: absolute; visibility: hidden; border-right: none; width: 0px; }
.CodeMirror div.CodeMirror-cursor { visibility: hidden; }
.CodeMirror-focused div.CodeMirror-cursor { visibility: inherit; }
.cm-searching { background: rgba(255, 255, 0, 0.4); }
@media print {
  .CodeMirror div.CodeMirror-cursor { visibility: hidden; }
}


html {
	font-size: 19px;
}

html, body {
	margin: auto;
	background: #fefefe;
}
body {
	font-family: "Vollkorn", Palatino, Times;
	color: #333;
	line-height: 1.4;
	text-align: justify;
}

#write {
	max-width: 960px;
	margin: 0 auto;
	margin-bottom: 2em;
	line-height: 1.53;
	padding-top: 40px;
}

@media only screen and (min-width: 1400px) {
	#write {
		max-width: 1100px;
	}
}

@media print {
	html {
		font-size: 13px;
	}
}

/* Typography
-------------------------------------------------------- */

#write>h1:first-child,
h1 {
	margin-top: 1.6em;
	font-weight: normal;
}

h1 {
	font-size:3em;
}

h2 {
	margin-top:2em;
	font-weight: normal;
}

h3 {
	font-weight: normal;
	font-style: italic;
	margin-top: 3em;
}

h1, 
h2, 
h3{
	text-align: center;
}

h2:after{
	border-bottom: 1px solid #2f2f2f;
    content: '';
    width: 100px;
    display: block;
    margin: 0 auto;
    height: 1px;
}

h1+h2, h2+h3 {
	margin-top: 0.83em;
}

p,
.mathjax-block {
	margin-top: 0;
	-webkit-hypens: auto;
	-moz-hypens: auto;
	hyphens: auto;
}
ul {
	list-style: square;
	padding-left: 1.2em;
}
ol {
	padding-left: 1.2em;
}
blockquote {
	margin-left: 1em;
	padding-left: 1em;
	border-left: 1px solid #ddd;
}
code,
pre {
	font-family: "Consolas", "Menlo", "Monaco", monospace, serif;
	font-size: .9em;
	background: white;
}
.md-fences{
	margin-left: 1em;
	padding-left: 1em;
	border: 1px solid #ddd;
	padding-bottom: 8px;
	padding-top: 6px;
	margin-bottom: 1.5em;
}

a {
	color: #2484c1;
	text-decoration: none;
}
a:hover {
	text-decoration: underline;
}
a img {
	border: none;
}
h1 a,
h1 a:hover {
	color: #333;
	text-decoration: none;
}
hr {
	color: #ddd;
	height: 1px;
	margin: 2em 0;
	border-top: solid 1px #ddd;
	border-bottom: none;
	border-left: 0;
	border-right: 0;
}
.ty-table-edit {
	background: #ededed;
    padding-top: 4px;
}
table {
	margin-bottom: 1.333333rem
}
table th,
table td {
	padding: 8px;
	line-height: 1.333333rem;
	vertical-align: top;
	border-top: 1px solid #ddd
}
table th {
	font-weight: bold
}
table thead th {
	vertical-align: bottom
}
table caption+thead tr:first-child th,
table caption+thead tr:first-child td,
table colgroup+thead tr:first-child th,
table colgroup+thead tr:first-child td,
table thead:first-child tr:first-child th,
table thead:first-child tr:first-child td {
	border-top: 0
}
table tbody+tbody {
	border-top: 2px solid #ddd
}

.task-list{
	padding:0;
}

.md-task-list-item {
	padding-left: 1.6rem;
}

.md-task-list-item > input:before {
	content: '\221A';
	display: inline-block;
	width: 1.33333333rem;
  	height: 1.6rem;
	vertical-align: middle;
	text-align: center;
	color: #ddd;
	background-color: #fefefe;
}

.md-task-list-item > input:checked:before,
.md-task-list-item > input[checked]:before{
	color: inherit;
}
.md-tag {
	color: inherit;
	font: inherit;
}
#write pre.md-meta-block {
	min-height: 35px;
	padding: 0.5em 1em;
}
#write pre.md-meta-block {
	white-space: pre;
	background: #f8f8f8;
	border: 0px;
	color: #999;
	
	width: 100vw;
	max-width: calc(100% + 60px);
	margin-left: -30px;
	border-left: 30px #f8f8f8 solid;
	border-right: 30px #f8f8f8 solid;

	margin-bottom: 2em;
	margin-top: -1.3333333333333rem;
	padding-top: 26px;
	padding-bottom: 10px;
	line-height: 1.8em;
	font-size: 0.9em;
	font-size: 0.76em;
	padding-left: 0;
}
.md-img-error.md-image>.md-meta{
	vertical-align: bottom;
}
#write>h5.md-focus:before {
	top: 2px;
}

.md-toc {
	margin-top: 40px;
}

.md-toc-content {
	padding-bottom: 20px;
}

.outline-expander:before {
	color: inherit;
	font-size: 14px;
	top: auto;
	content: "\f0da";
	font-family: FontAwesome;
}

.outline-expander:hover:before,
.outline-item-open>.outline-item>.outline-expander:before {
  	content: "\f0d7";
}

/** source code mode */
#typora-source {
	font-family: Courier, monospace;
    color: #6A6A6A;
}

.html-for-mac #typora-sidebar {
    -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
    box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
}

.cm-s-typora-default .cm-header, 
.cm-s-typora-default .cm-property,
.CodeMirror.cm-s-typora-default div.CodeMirror-cursor {
	color: #428bca;
}

.cm-s-typora-default .cm-atom, .cm-s-typora-default .cm-number {
	color: #777777;
}

.typora-node .file-list-item-parent-loc, 
.typora-node .file-list-item-time, 
.typora-node .file-list-item-summary {
	font-family: arial, sans-serif;
}

.md-task-list-item>input {
    margin-left: -1.3em;
    margin-top: calc(1rem - 12px);
}

.md-mathjax-midline {
	background: #fafafa;
}

.md-fences .code-tooltip {
	bottom: -2em !important;
}

.dropdown-menu .divider {
	border-color: #e5e5e5;
}

 :root {--mermaid-font-zoom:0.833333em ;} 
</style>
</head>
<body class='typora-export os-windows'>
<div id='write'  class=''><div class='md-toc' mdtype='toc'><p class="md-toc-content" role="list"><span role="listitem" class="md-toc-item md-toc-h1" data-ref="n3"><a class="md-toc-inner" href="#一项目完整拓扑">一、项目完整拓扑</a></span><span role="listitem" class="md-toc-item md-toc-h4" data-ref="n4"><a class="md-toc-inner" href="#1完整拓扑">1、完整拓扑</a></span><span role="listitem" class="md-toc-item md-toc-h1" data-ref="n8"><a class="md-toc-inner" href="#二私有镜像仓库harbor">二、私有镜像仓库Harbor</a></span><span role="listitem" class="md-toc-item md-toc-h4" data-ref="n9"><a class="md-toc-inner" href="#1私有镜像仓库优点">1、私有镜像仓库优点</a></span><span role="listitem" class="md-toc-item md-toc-h4" data-ref="n11"><a class="md-toc-inner" href="#2环境准备">2、环境准备</a></span><span role="listitem" class="md-toc-item md-toc-h6" data-ref="n29"><a class="md-toc-inner" href="#11-部署私有镜像仓库harbor">1.1 部署私有镜像仓库harbor</a></span><span role="listitem" class="md-toc-item md-toc-h4" data-ref="n37"><a class="md-toc-inner" href="#3登录harbor">3、登录harbor</a></span><span role="listitem" class="md-toc-item md-toc-h4" data-ref="n41"><a class="md-toc-inner" href="#4制作镜像">4、制作镜像</a></span><span role="listitem" class="md-toc-item md-toc-h6" data-ref="n42"><a class="md-toc-inner" href="#11-tomcatfilebeat镜像">1.1 tomcat、filebeat镜像</a></span><span role="listitem" class="md-toc-item md-toc-h6" data-ref="n47"><a class="md-toc-inner" href="#12-打标签上传镜像">1.2 打标签上传镜像</a></span><span role="listitem" class="md-toc-item md-toc-h6" data-ref="n49"><a class="md-toc-inner" href="#13-测试下载镜像">1.3 测试下载镜像</a></span></p></div><p>&nbsp;</p><h1><a name="一项目完整拓扑" class="md-header-anchor"></a><span>一、项目完整拓扑</span></h1><h4><a name="1完整拓扑" class="md-header-anchor"></a><span>1、完整拓扑</span></h4><p><span>使用 Nginx 搭建 web 集群，动态页面由 PHP 和 Tomcat 集群解析</span>
<span>使用 NFS 存放网页，将访问日志存放在计算节点的 /var/weblog 目录下</span>
<span>弹性部署 PHP、Tomcat 集群服务</span></p><div class="md-diagram-panel"><svg id="mermaidChart0" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="1189.015380859375" style="max-width: 1704.82px; height: 1229.02px;" viewBox="0 0 1704.8150634765625 1189.015380859375" class="md-require-zoom-fix"><style>#mermaidChart0{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:22.800000543594372px;fill:#333333;}#mermaidChart0 .error-icon{fill:hsl(60,100%,100%);}#mermaidChart0 .error-text{fill:rgb(0,0,0);stroke:rgb(0,0,0);}#mermaidChart0 .edge-thickness-normal{stroke-width:2px;}#mermaidChart0 .edge-thickness-thick{stroke-width:3.5px;}#mermaidChart0 .edge-pattern-solid{stroke-dasharray:0;}#mermaidChart0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaidChart0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaidChart0 .marker{fill:#000000;}#mermaidChart0 .marker.cross{stroke:#000000;}#mermaidChart0 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:22.800000543594372px;}#mermaidChart0 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaidChart0 .label text{fill:#333;}#mermaidChart0 .node rect,#mermaidChart0 .node circle,#mermaidChart0 .node ellipse,#mermaidChart0 .node polygon,#mermaidChart0 .node path{fill:#ECECFF;stroke:hsl(240,60%,86.2745098039%);stroke-width:1px;}#mermaidChart0 .node .label{text-align:center;}#mermaidChart0 .node.clickable{cursor:pointer;}#mermaidChart0 .arrowheadPath{fill:undefined;}#mermaidChart0 .edgePath .path{stroke:#000000;stroke-width:1.5px;}#mermaidChart0 .flowchart-link{stroke:#000000;fill:none;}#mermaidChart0 .edgeLabel{background-color:#f4f4f4;text-align:center;}#mermaidChart0 .edgeLabel rect{opacity:0.5;background-color:#f4f4f4;fill:#f4f4f4;}#mermaidChart0 .cluster rect{fill:hsl(60,100%,100%);stroke:hsl(60,60%,90%);stroke-width:1px;}#mermaidChart0 .cluster text{fill:rgb(0,0,0);}#mermaidChart0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(60,100%,100%);border:1px solid undefined;border-radius:2px;pointer-events:none;z-index:100;}#mermaidChart0:root{--mermaid-font-family:sans-serif;}#mermaidChart0:root{--mermaid-alt-font-family:sans-serif;}#mermaidChart0 .I &gt; *{fill:#009000 !important;color:#ffffff !important;stroke:#f06080 !important;stroke-width:3px !important;}#mermaidChart0 .I tspan{fill:#ffffff !important;}#mermaidChart0 .NFS &gt; *{fill:#ccf !important;stroke:#f66 !important;stroke-width:3px !important;stroke-dasharray:0 !important;0 !important;}#mermaidChart0 .NFS tspan{!important;}#mermaidChart0 .User &gt; *{fill:#ccddee !important;color:#000000 !important;stroke:#555555 !important;stroke-width:3px !important;}#mermaidChart0 .User tspan{fill:#000000 !important;}#mermaidChart0 .S &gt; *{fill:#ffaa00 !important;color:#3333ff !important;stroke:#303030 !important;stroke-width:3px !important;}#mermaidChart0 .S tspan{fill:#3333ff !important;}#mermaidChart0 .Pod &gt; *{fill:#ccffbb !important;color:#000000 !important;stroke-width:3px !important;stroke-dasharray:0 !important;0 !important;}#mermaidChart0 .Pod tspan{fill:#000000 !important;}#mermaidChart0 .vPod &gt; *{fill:#aaeeaa !important;color:#000000 !important;stroke-width:3px !important;stroke:#f00000 !important;stroke-dasharray:10 !important;0 !important;}#mermaidChart0 .vPod tspan{fill:#000000 !important;}#mermaidChart0 .Kubernetes &gt; *{fill:#ffffc0 !important;color:#ff00ff !important;stroke-width:4px !important;}#mermaidChart0 .Kubernetes tspan{fill:#ff00ff !important;}#mermaidChart0 .ZONE &gt; *{fill:#ffffc0 !important;color:#ff00ff !important;}#mermaidChart0 .ZONE tspan{fill:#ff00ff !important;}#mermaidChart0 flowchart-v2{fill:apa;}</style><g transform="translate(0, 2)"><marker id="flowchart-pointEnd" class="marker flowchart" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker><marker id="flowchart-pointStart" class="marker flowchart" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker><marker id="flowchart-circleEnd" class="marker flowchart" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></circle></marker><marker id="flowchart-circleStart" class="marker flowchart" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></circle></marker><marker id="flowchart-crossEnd" class="marker cross flowchart" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"></path></marker><marker id="flowchart-crossStart" class="marker cross flowchart" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"></path></marker><g class="root"><g class="clusters"><g class="cluster ZONE" id="Z3"><rect rx="0" ry="0" x="1389.0155410766602" y="8" width="186.86196899414062" height="299.99992752075195"></rect><g class="cluster-label" transform="translate(1439.7642364501953, 6)"><foreignObject width="85.36457824707031" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>ES Cluster</span></div></foreignObject></g></g><g class="cluster ZONE" id="Z2"><rect rx="0" ry="0" x="782.1275863647461" y="16.333327293395996" width="506.88795471191406" height="254.99994564056396"></rect><g class="cluster-label" transform="translate(999.2499504089355, 14.333327293395996)"><foreignObject width="72.64322662353516" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>Logstash</span></div></foreignObject></g></g><g class="cluster Kubernetes" id="K"><rect rx="0" ry="0" x="123.6640625" y="291.33327293395996" width="962.7733688354492" height="887.6821060180664"></rect><g class="cluster-label" transform="translate(557.3554344177246, 289.33327293395996)"><foreignObject width="95.390625" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>Kubernetes</span></div></foreignObject></g></g></g><g class="edgePaths"><path d="M198.20789226781844,660.6588830947876L208.16890243102708,631.4499044418335C218.12991259423575,602.2409257888794,238.05193292065303,543.8229684829712,254.5852074372959,514.6139898300171C271.1184819539388,485.405011177063,284.2630106608073,485.405011177063,290.8352750142415,485.405011177063L297.4075393676758,485.405011177063" id="L-I-WS1" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-I LE-WS1" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M198.5509851528764,703.9921922683716L208.45481316857536,731.7448372840881C218.35864118427435,759.4974822998047,238.16629721567233,815.0027723312378,252.23679189803798,842.7554173469543C266.3072865804036,870.5080623626709,274.640619913737,870.5080623626709,278.8072865804036,870.5080623626709L282.9739532470703,870.5080623626709" id="L-I-WS2" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-I LE-WS2" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M392.9997541346119,449.5716676712036L403.08876911120007,439.86526854832965C413.1777840877882,430.15886942545575,433.3558140409644,410.7460711797078,447.61149568421916,401.0396720568339C461.86717732747394,391.33327293395996,470.2005106608073,391.33327293395996,478.5338439941406,391.33327293395996C486.86717732747394,391.33327293395996,495.2005106608073,391.33327293395996,503.5338439941406,391.33327293395996C511.86717732747394,391.33327293395996,520.2005106608073,391.33327293395996,524.367177327474,391.33327293395996L528.5338439941406,391.33327293395996" id="L-WS1-WEB1" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-WS1 LE-WEB1" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M382.84723183240476,521.2383546829224L394.62833385936074,536.8199102083842C406.4094358863167,552.4014657338461,429.97163994022867,583.5645767847697,445.91940863385133,599.1461323102316C461.86717732747394,614.7276878356934,470.2005106608073,614.7276878356934,478.5338439941406,614.7276878356934C486.86717732747394,614.7276878356934,495.2005106608073,614.7276878356934,503.5338439941406,614.7276878356934C511.86717732747394,614.7276878356934,520.2005106608073,614.7276878356934,524.367177327474,614.7276878356934L528.5338439941406,614.7276878356934" id="L-WS1-WEB2" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-WS1 LE-WEB2" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M577.18313364443,423.47380608304826L583.2828171605602,434.9089540539888C589.3825006766903,446.34410202492927,601.5818677089507,469.21439796681034,615.7583307749502,493.11774344243025C629.9347938409496,517.0210889180502,646.0883529406883,541.9574839274088,654.1651324905577,554.4256814320883L662.241912040427,566.8938789367676" id="L-WEB1-PS1" class=" edge-thickness-normal edge-pattern-dotted flowchart-link LS-WEB1 LE-PS1" style="fill:none;stroke-width:2px;stroke-dasharray:3;" marker-end="url(#flowchart-pointEnd)"></path><path d="M588.7812347412109,631.0624167102625L592.9479014078776,633.3218131577016C597.1145680745443,635.5812096051408,605.4479014078776,640.1000025000191,613.8224678039551,639.899963649748C622.1970342000326,639.699924799477,630.6128336588541,634.7810542040565,634.820733388265,632.3216189063463L639.0286331176758,629.8621836086361" id="L-WEB2-PS1" class=" edge-thickness-normal edge-pattern-dotted flowchart-link LS-WEB2 LE-PS1" style="fill:none;stroke-width:2px;stroke-dasharray:3;" marker-end="url(#flowchart-pointEnd)"></path><path d="M392.18745335995857,834.6747188568115L402.4118517989889,824.6187585194906C412.6362502380193,814.5627981821696,433.0850471160799,794.4508775075277,447.47611222177693,784.3949171702067C461.86717732747394,774.3389568328857,470.2005106608073,774.3389568328857,478.5338439941406,774.3389568328857C486.86717732747394,774.3389568328857,495.2005106608073,774.3389568328857,503.5338439941406,774.3389568328857C511.86717732747394,774.3389568328857,520.2005106608073,774.3389568328857,524.367177327474,774.3389568328857L528.5338439941406,774.3389568328857" id="L-WS2-WEB3" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-WS2 LE-WEB3" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M376.74449327428573,906.3414058685303L389.54271839426156,928.1894385019938C402.3409435142374,950.0374711354574,427.93739375418903,993.7335364023844,444.90228554083143,1015.581569035848C461.86717732747394,1037.4296016693115,470.2005106608073,1037.4296016693115,478.5338439941406,1037.4296016693115C486.86717732747394,1037.4296016693115,495.2005106608073,1037.4296016693115,503.5338439941406,1037.4296016693115C511.86717732747394,1037.4296016693115,520.2005106608073,1037.4296016693115,524.367177327474,1037.4296016693115L528.5338439941406,1037.4296016693115" id="L-WS2-WEB4" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-WS2 LE-WEB4" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M574.2654758131374,807.0223214766083L580.851435634483,821.5059793509294C587.4373954558286,835.9896372252502,600.6093150985198,864.9569529738923,615.1806454955675,891.4831637962112C629.7519758926152,918.0093746185303,645.7227170440193,942.0944805145264,653.7080876197215,954.1370334625244L661.6934581954235,966.1795864105225" id="L-WEB3-PS2" class=" edge-thickness-normal edge-pattern-dotted flowchart-link LS-WEB3 LE-PS2" style="fill:none;stroke-width:2px;stroke-dasharray:3;" marker-end="url(#flowchart-pointEnd)"></path><path d="M588.7812347412109,1057.278928024657L592.9479014078776,1060.024458593037C597.1145680745443,1062.7699891614168,605.4479014078776,1068.2610502981768,615.593368376039,1065.0222745311073C625.7388353442005,1061.783498764038,637.6964359471903,1049.8148860931396,643.675236248685,1043.8305797576904L649.6540365501799,1037.8462734222412" id="L-WEB4-PS2" class=" edge-thickness-normal edge-pattern-dotted flowchart-link LS-WEB4 LE-PS2" style="fill:none;stroke-width:2px;stroke-dasharray:3;" marker-end="url(#flowchart-pointEnd)"></path><path d="M703.2617653586104,566.8938789367676L712.2394021929664,548.8283802668253C721.2170390273222,530.7628815968832,739.1723126960342,494.6318842569987,752.3166161970568,476.56638558705646C765.4609196980795,458.50088691711426,773.7942530314127,458.50088691711426,790.6811866760254,458.50088691711426C807.5681203206381,458.50088691711426,833.0086542765299,458.50088691711426,858.4491882324219,458.50088691711426C883.8897221883138,458.50088691711426,909.3302561442057,458.50088691711426,930.6366755167643,458.50088691711426C951.9430948893229,458.50088691711426,969.1153996785482,458.50088691711426,977.7015520731608,458.50088691711426L986.2877044677734,458.50088691711426" id="L-PS1-PHP1" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-PS1 LE-PHP1" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M731.8801879882812,583.365475301928L736.088087717692,581.6105818988439C740.2959874471029,579.8556884957596,748.7117869059244,576.3459016895912,757.086353302002,574.5910082865071C765.4609196980795,572.8361148834229,773.7942530314127,572.8361148834229,790.6811866760254,572.8361148834229C807.5681203206381,572.8361148834229,833.0086542765299,572.8361148834229,858.4491882324219,572.8361148834229C883.8897221883138,572.8361148834229,909.3302561442057,572.8361148834229,930.6366755167643,572.8361148834229C951.9430948893229,572.8361148834229,969.1153996785482,572.8361148834229,977.7015520731608,572.8361148834229L986.2877044677734,572.8361148834229" id="L-PS1-PHP2" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-PS1 LE-PHP2" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M715.8684822093261,638.5605659484863L722.7449995685628,646.6623620986938C729.6215169277993,654.7641582489014,743.3745516462727,670.9677505493164,754.417735672176,679.0695466995239C765.4609196980795,687.1713428497314,773.7942530314127,687.1713428497314,790.6811866760254,687.1713428497314C807.5681203206381,687.1713428497314,833.0086542765299,687.1713428497314,858.4491882324219,687.1713428497314C883.8897221883138,687.1713428497314,909.3302561442057,687.1713428497314,930.6366755167643,687.1713428497314C951.9430948893229,687.1713428497314,969.1153996785482,687.1713428497314,977.7015520731608,687.1713428497314L986.2877044677734,687.1713428497314" id="L-PS1-PHP3" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-PS1 LE-PHP3" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M701.8239352528467,966.1795864105225L711.0412104381634,946.0027154286703C720.2584856234798,925.825844446818,738.693035994113,885.4721024831136,752.0769778460963,865.2952315012614C765.4609196980795,845.1183605194092,773.7942530314127,845.1183605194092,790.6811866760254,845.1183605194092C807.5681203206381,845.1183605194092,833.0086542765299,845.1183605194092,858.4491882324219,845.1183605194092C883.8897221883138,845.1183605194092,909.3302561442057,845.1183605194092,928.4036026000977,845.1183605194092C947.4769490559896,845.1183605194092,960.1831080118815,845.1183605194092,966.5361874898275,845.1183605194092L972.8892669677734,845.1183605194092" id="L-PS2-TM1" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-PS2 LE-TM1" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M732.1275863647461,979.0024770557917L736.2942530314127,976.9482588619024C740.4609196980795,974.8940406680131,748.7942530314127,970.7856042802346,757.1275863647461,968.7313860863454C765.4609196980795,966.677167892456,773.7942530314127,966.677167892456,790.6811866760254,966.677167892456C807.5681203206381,966.677167892456,833.0086542765299,966.677167892456,858.4491882324219,966.677167892456C883.8897221883138,966.677167892456,909.3302561442057,966.677167892456,928.4036026000977,966.677167892456C947.4769490559896,966.677167892456,960.1831080118815,966.677167892456,966.5361874898275,966.677167892456L972.8892669677734,966.677167892456" id="L-PS2-TM2" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-PS2 LE-TM2" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M715.2409892874664,1037.8462734222412L722.2220888003463,1046.244557062785C729.2031883132263,1054.6428407033284,743.1653873389863,1071.4394079844158,754.3131535185329,1079.8376916249592C765.4609196980795,1088.235975265503,773.7942530314127,1088.235975265503,790.6811866760254,1088.235975265503C807.5681203206381,1088.235975265503,833.0086542765299,1088.235975265503,858.4491882324219,1088.235975265503C883.8897221883138,1088.235975265503,909.3302561442057,1088.235975265503,928.4036026000977,1088.235975265503C947.4769490559896,1088.235975265503,960.1831080118815,1088.235975265503,966.5361874898275,1088.235975265503L972.8892669677734,1088.235975265503" id="L-PS2-TM3" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-PS2 LE-TM3" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M581.98853871498,360.46090914722333L587.2873213860184,352.2729697783461C592.586104057057,344.08503040946886,603.1836693991339,327.70915167171444,620.4279813721337,319.5212123028372C637.6722933451334,311.33327293395996,661.563351949056,311.33327293395996,685.4544105529785,311.33327293395996C709.345469156901,311.33327293395996,733.2365277608236,311.33327293395996,749.3487237294515,311.33327293395996C765.4609196980795,311.33327293395996,773.7942530314127,311.33327293395996,788.1161634950626,288.95849442767957C802.4380739587122,266.58371592139923,822.7485615526781,221.83415890883848,832.9038053496612,199.45938040255808L843.0590491466443,177.08460189627772" id="L-WEB1-A1" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-WEB1 LE-A1" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M565.2436957971578,581.0645511485104L573.3332856211666,539.4426714460853C581.4228754451755,497.82079174366027,597.6020550931931,414.5770323388101,617.6371742191633,372.95515263638504C637.6722933451334,331.33327293395996,661.563351949056,331.33327293395996,685.4544105529785,331.33327293395996C709.345469156901,331.33327293395996,733.2365277608236,331.33327293395996,749.3487237294515,331.33327293395996C765.4609196980795,331.33327293395996,773.7942530314127,331.33327293395996,788.314913158547,305.8239107578309C802.8355732856816,280.3145485817019,823.5435602066169,229.2958242294438,833.8975536670846,203.78646205331475L844.2515471275523,178.27709987718575" id="L-WEB2-A1" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-WEB2 LE-A1" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M563.0699622235122,740.56680533425L571.521840976462,675.6945499342017C579.9737197294118,610.8222945341533,596.8774772353114,481.0777837340567,617.2748852902224,416.2055283340083C637.6722933451334,351.33327293395996,661.563351949056,351.33327293395996,685.4544105529785,351.33327293395996C709.345469156901,351.33327293395996,733.2365277608236,351.33327293395996,749.3487237294515,351.33327293395996C765.4609196980795,351.33327293395996,773.7942530314127,351.33327293395996,788.4859143460222,322.6615786119728C803.177575660632,293.98988428998564,824.2275649565178,236.64649564601132,834.7525596044607,207.97480132402416L845.2775542524035,179.30310700203702" id="L-WEB3-A1" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-WEB3 LE-A1" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M561.4596565199022,1003.6050065401645L570.179919556787,898.2263842724637C578.9001825936717,792.847762004763,596.3407086674414,582.0905174693615,617.0065010062874,476.71189520166075C637.6722933451334,371.33327293395996,661.563351949056,371.33327293395996,685.4544105529785,371.33327293395996C709.345469156901,371.33327293395996,733.2365277608236,371.33327293395996,749.3487237294515,371.33327293395996C765.4609196980795,371.33327293395996,773.7942530314127,371.33327293395996,788.6345990285562,339.4769299611733C803.4749450256995,307.62058698838666,824.8223036866531,243.90790104281336,835.4959830171298,212.05155807002674L846.1696623476066,180.19521509724007" id="L-WEB4-A1" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-WEB4 LE-A1" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M910.2707901000975,141.65313911437968L914.3541234334308,141.56980578104637C918.4374567667643,141.48647244771308,926.604123433431,141.31980578104648,934.9374567667643,141.31980578104654C943.2707901000977,141.31980578104663,951.7707901000977,141.48647244771334,956.0207901000977,141.5698057810467L960.2707901000975,141.65313911438008" id="L-A1-A2" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-A1 LE-A2" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M1061.9374313354492,141.65313911438008L1066.0207646687825,141.5698057810467C1070.104098002116,141.48647244771334,1078.2707646687825,141.31980578104663,1086.5207646687825,141.23647244771325C1094.7707646687825,141.15313911437988,1103.104098002116,141.15313911437988,1112.5732828776042,141.23647244771317C1122.0424677530925,141.31980578104648,1132.6475041707358,141.4864724477131,1137.9500223795574,141.5698057810464L1143.2525405883791,141.6531391143797" id="L-A2-A3" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-A2 LE-A3" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M1231.6025452385009,115.05525252915028L1241.171377878194,106.65715287209058C1250.7402105178874,98.25905321503085,1269.8778757972739,81.46285390091141,1283.6133751036336,73.06475424385171C1297.3488744099934,64.66665458679199,1305.682207743327,64.66665458679199,1314.0155410766602,64.66665458679199C1322.3488744099934,64.66665458679199,1330.682207743327,64.66665458679199,1339.0155410766602,64.66665458679199C1347.3488744099934,64.66665458679199,1355.682207743327,64.66665458679199,1364.0155410766602,64.66665458679199C1372.3488744099934,64.66665458679199,1380.682207743327,64.66665458679199,1389.0155410766602,64.66665458679199C1397.3488744099934,64.66665458679199,1405.682207743327,64.66665458679199,1409.8488744099934,64.66665458679199L1414.0155410766602,64.66665458679199" id="L-A3-ES1" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-A3 LE-ES1" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M1249.0344790436213,150.81909189448922L1255.6979893824612,152.01590387213702C1262.361499721301,153.21271584978481,1275.6885203989805,155.6063398050804,1286.518697404487,156.80315178272818C1297.3488744099934,157.99996376037598,1305.682207743327,157.99996376037598,1314.0155410766602,157.99996376037598C1322.3488744099934,157.99996376037598,1330.682207743327,157.99996376037598,1339.0155410766602,157.99996376037598C1347.3488744099934,157.99996376037598,1355.682207743327,157.99996376037598,1364.0155410766602,157.99996376037598C1372.3488744099934,157.99996376037598,1380.682207743327,157.99996376037598,1389.0155410766602,157.99996376037598C1397.3488744099934,157.99996376037598,1405.682207743327,157.99996376037598,1409.8488744099934,157.99996376037598L1414.0155410766602,157.99996376037598" id="L-A3-ES2" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-A3 LE-ES2" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M1226.3739612984118,173.4796096396989L1236.8142245947865,186.4552201887424C1247.2544878911613,199.4308307377859,1268.1350144839107,225.38205183587294,1282.7419444469522,238.35766238491647C1297.3488744099934,251.33327293395996,1305.682207743327,251.33327293395996,1314.0155410766602,251.33327293395996C1322.3488744099934,251.33327293395996,1330.682207743327,251.33327293395996,1339.0155410766602,251.33327293395996C1347.3488744099934,251.33327293395996,1355.682207743327,251.33327293395996,1364.0155410766602,251.33327293395996C1372.3488744099934,251.33327293395996,1380.682207743327,251.33327293395996,1389.0155410766602,251.33327293395996C1397.3488744099934,251.33327293395996,1405.682207743327,251.33327293395996,1409.8488744099934,251.33327293395996L1414.0155410766602,251.33327293395996" id="L-A3-ES3" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-A3 LE-ES3" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M1550.8775100708008,64.66665458679199L1555.0441767374675,64.66665458679199C1559.210843404134,64.66665458679199,1567.5441767374675,64.66665458679199,1575.8775100708008,64.66665458679199C1584.210843404134,64.66665458679199,1592.5441767374675,64.66665458679199,1601.2882116778999,70.51054872506977C1610.0322466183322,76.35444286334754,1619.1869831658635,88.0422311399031,1623.7643514396295,93.88612527818087L1628.3417197133952,99.73001941645865" id="L-ES1-kk" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-ES1 LE-kk" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M1550.8775100708008,157.99996376037598L1555.0441767374675,157.99996376037598C1559.210843404134,157.99996376037598,1567.5441767374675,157.99996376037598,1575.8775100708008,157.99996376037598C1584.210843404134,157.99996376037598,1592.5441767374675,157.99996376037598,1600.8775100708008,156.01801653754393C1609.210843404134,154.03606931471188,1617.5441767374675,150.07217486904779,1621.710843404134,148.09022764621574L1625.8775100708008,146.1082804233837" id="L-ES2-kk" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-ES2 LE-kk" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M1550.8775100708008,251.33327293395996L1555.0441767374675,251.33327293395996C1559.210843404134,251.33327293395996,1567.5441767374675,251.33327293395996,1575.8775100708008,251.33327293395996C1584.210843404134,251.33327293395996,1592.5441767374675,251.33327293395996,1603.8799084283057,236.66245778701943C1615.2156401191442,221.9916426400789,1629.5537701674875,192.65001234619783,1636.7228351916594,177.9791971992573L1643.8919002158311,163.30838205231674" id="L-ES3-kk" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-ES3 LE-kk" style="fill:none;" marker-end="url(#flowchart-pointEnd)"></path><path d="M588.7812347412109,391.33327293395996L592.9479014078776,391.33327293395996C597.1145680745443,391.33327293395996,605.4479014078776,391.33327293395996,621.5600973765055,391.33327293395996C637.6722933451334,391.33327293395996,661.563351949056,391.33327293395996,685.4544105529785,391.33327293395996C709.345469156901,391.33327293395996,733.2365277608236,391.33327293395996,749.3487237294515,391.33327293395996C765.4609196980795,391.33327293395996,773.7942530314127,391.33327293395996,790.6811866760254,391.33327293395996C807.5681203206381,391.33327293395996,833.0086542765299,391.33327293395996,858.4491882324219,391.33327293395996C883.8897221883138,391.33327293395996,909.3302561442057,391.33327293395996,934.6894098917643,391.33327293395996C960.0485636393229,391.33327293395996,985.3263371785482,391.33327293395996,1010.6041107177734,391.33327293395996C1035.8818842569988,391.33327293395996,1061.1596577962239,391.33327293395996,1077.9652112325032,391.33327293395996C1094.7707646687825,391.33327293395996,1103.104098002116,391.33327293395996,1122.06894048055,481.2157343228658C1141.0337829589844,571.0981957117716,1170.6301345825195,750.8631184895834,1185.428310394287,840.7455798784891L1200.2264862060547,930.628041267395" id="L-WEB1-NFS" class=" edge-thickness-normal edge-pattern-dotted flowchart-link LS-WEB1 LE-NFS" style="fill:none;stroke-width:2px;stroke-dasharray:3;" marker-start="url(#flowchart-circleStart)" marker-end="url(#flowchart-circleEnd)"></path><path d="M1034.9205169677734,458.50088691711426L1043.506669362386,458.50088691711426C1052.0928217569988,458.50088691711426,1069.2651265462239,458.50088691711426,1082.0179456075032,458.50088691711426C1094.7707646687825,458.50088691711426,1103.104098002116,458.50088691711426,1122.06894048055,537.1887459754944C1141.0337829589844,615.8766050338745,1170.6301345825195,773.2523231506348,1185.428310394287,851.9401822090149L1200.2264862060547,930.628041267395" id="L-PHP1-NFS" class=" edge-thickness-normal edge-pattern-dotted flowchart-link LS-PHP1 LE-NFS" style="fill:none;stroke-width:2px;stroke-dasharray:3;" marker-start="url(#flowchart-circleStart)" marker-end="url(#flowchart-circleEnd)"></path><path d="M1034.9205169677734,572.8361148834229L1043.506669362386,572.8361148834229C1052.0928217569988,572.8361148834229,1069.2651265462239,572.8361148834229,1082.0179456075032,572.8361148834229C1094.7707646687825,572.8361148834229,1103.104098002116,572.8361148834229,1122.06894048055,632.4681026140848C1141.0337829589844,692.100090344747,1170.6301345825195,811.3640658060709,1185.428310394287,870.996053536733L1200.2264862060547,930.628041267395" id="L-PHP2-NFS" class=" edge-thickness-normal edge-pattern-dotted flowchart-link LS-PHP2 LE-NFS" style="fill:none;stroke-width:2px;stroke-dasharray:3;" marker-start="url(#flowchart-circleStart)" marker-end="url(#flowchart-circleEnd)"></path><path d="M1034.9205169677734,687.1713428497314L1043.506669362386,687.1713428497314C1052.0928217569988,687.1713428497314,1069.2651265462239,687.1713428497314,1082.0179456075032,687.1713428497314C1094.7707646687825,687.1713428497314,1103.104098002116,687.1713428497314,1122.06894048055,727.7474592526754C1141.0337829589844,768.3235756556193,1170.6301345825195,849.4758084615072,1185.428310394287,890.051924864451L1200.2264862060547,930.628041267395" id="L-PHP3-NFS" class=" edge-thickness-normal edge-pattern-dotted flowchart-link LS-PHP3 LE-NFS" style="fill:none;stroke-width:2px;stroke-dasharray:3;" marker-start="url(#flowchart-circleStart)" marker-end="url(#flowchart-circleEnd)"></path><path d="M572.0266603647915,647.7429397985582L578.9857560941947,665.5089426376127C585.944851823598,683.2749454766673,599.8630432824044,718.8069511547765,618.7676683137689,736.5729539938311C637.6722933451334,754.3389568328857,661.563351949056,754.3389568328857,685.4544105529785,754.3389568328857C709.345469156901,754.3389568328857,733.2365277608236,754.3389568328857,749.3487237294515,754.3389568328857C765.4609196980795,754.3389568328857,773.7942530314127,754.3389568328857,790.6811866760254,754.3389568328857C807.5681203206381,754.3389568328857,833.0086542765299,754.3389568328857,858.4491882324219,754.3389568328857C883.8897221883138,754.3389568328857,909.3302561442057,754.3389568328857,934.6894098917643,754.3389568328857C960.0485636393229,754.3389568328857,985.3263371785482,754.3389568328857,1010.6041107177734,754.3389568328857C1035.8818842569988,754.3389568328857,1061.1596577962239,754.3389568328857,1077.9652112325032,754.3389568328857C1094.7707646687825,754.3389568328857,1103.104098002116,754.3389568328857,1122.06894048055,783.720470905304C1141.0337829589844,813.1019849777222,1170.6301345825195,871.8650131225586,1185.428310394287,901.2465271949768L1200.2264862060547,930.628041267395" id="L-WEB2-NFS" class=" edge-thickness-normal edge-pattern-dotted flowchart-link LS-WEB2 LE-NFS" style="fill:none;stroke-width:2px;stroke-dasharray:3;" marker-start="url(#flowchart-circleStart)" marker-end="url(#flowchart-circleEnd)"></path><path d="M588.7812347412109,774.3389568328857L592.9479014078776,774.3389568328857C597.1145680745443,774.3389568328857,605.4479014078776,774.3389568328857,621.5600973765055,774.3389568328857C637.6722933451334,774.3389568328857,661.563351949056,774.3389568328857,685.4544105529785,774.3389568328857C709.345469156901,774.3389568328857,733.2365277608236,774.3389568328857,749.3487237294515,774.3389568328857C765.4609196980795,774.3389568328857,773.7942530314127,774.3389568328857,790.6811866760254,774.3389568328857C807.5681203206381,774.3389568328857,833.0086542765299,774.3389568328857,858.4491882324219,774.3389568328857C883.8897221883138,774.3389568328857,909.3302561442057,774.3389568328857,934.6894098917643,774.3389568328857C960.0485636393229,774.3389568328857,985.3263371785482,774.3389568328857,1010.6041107177734,774.3389568328857C1035.8818842569988,774.3389568328857,1061.1596577962239,774.3389568328857,1077.9652112325032,774.3389568328857C1094.7707646687825,774.3389568328857,1103.104098002116,774.3389568328857,1122.06894048055,800.3871375719706C1141.0337829589844,826.4353183110555,1170.6301345825195,878.5316797892252,1185.428310394287,904.5798605283102L1200.2264862060547,930.628041267395" id="L-WEB3-NFS" class=" edge-thickness-normal edge-pattern-dotted flowchart-link LS-WEB3 LE-NFS" style="fill:none;stroke-width:2px;stroke-dasharray:3;" marker-start="url(#flowchart-circleStart)" marker-end="url(#flowchart-circleEnd)"></path><path d="M1048.3189544677734,845.1183605194092L1054.6720339457195,845.1183605194092C1061.0251134236653,845.1183605194092,1073.7312723795574,845.1183605194092,1084.25101852417,845.1183605194092C1094.7707646687825,845.1183605194092,1103.104098002116,845.1183605194092,1122.06894048055,859.3699739774069C1141.0337829589844,873.6215874354044,1170.6301345825195,902.1248143513998,1185.428310394287,916.3764278093973L1200.2264862060547,930.628041267395" id="L-TM1-NFS" class=" edge-thickness-normal edge-pattern-dotted flowchart-link LS-TM1 LE-NFS" style="fill:none;stroke-width:2px;stroke-dasharray:3;" marker-start="url(#flowchart-circleStart)" marker-end="url(#flowchart-circleEnd)"></path><path d="M1048.3189544677734,966.677167892456L1054.6720339457195,966.677167892456C1061.0251134236653,966.677167892456,1073.7312723795574,966.677167892456,1084.25101852417,966.677167892456C1094.7707646687825,966.677167892456,1103.104098002116,966.677167892456,1122.06894048055,960.6689801216125C1141.0337829589844,954.660792350769,1170.6301345825195,942.644416809082,1185.428310394287,936.6362290382385L1200.2264862060547,930.628041267395" id="L-TM2-NFS" class=" edge-thickness-normal edge-pattern-dotted flowchart-link LS-TM2 LE-NFS" style="fill:none;stroke-width:2px;stroke-dasharray:3;" marker-start="url(#flowchart-circleStart)" marker-end="url(#flowchart-circleEnd)"></path><path d="M1048.3189544677734,1088.235975265503L1054.6720339457195,1088.235975265503C1061.0251134236653,1088.235975265503,1073.7312723795574,1088.235975265503,1084.25101852417,1088.235975265503C1094.7707646687825,1088.235975265503,1103.104098002116,1088.235975265503,1122.06894048055,1061.9679862658184C1141.0337829589844,1035.6999972661336,1170.6301345825195,983.1640192667643,1185.428310394287,956.8960302670797L1200.2264862060547,930.628041267395" id="L-TM3-NFS" class=" edge-thickness-normal edge-pattern-dotted flowchart-link LS-TM3 LE-NFS" style="fill:none;stroke-width:2px;stroke-dasharray:3;" marker-start="url(#flowchart-circleStart)" marker-end="url(#flowchart-circleEnd)"></path><path d="M574.0086765606744,1070.1544853127748L580.6374362574305,1084.96463425265C587.2661959541866,1099.7747831925253,600.5237153476987,1129.3950810722758,619.0980043464161,1144.205230012151C637.6722933451334,1159.0153789520264,661.563351949056,1159.0153789520264,685.4544105529785,1159.0153789520264C709.345469156901,1159.0153789520264,733.2365277608236,1159.0153789520264,749.3487237294515,1159.0153789520264C765.4609196980795,1159.0153789520264,773.7942530314127,1159.0153789520264,790.6811866760254,1159.0153789520264C807.5681203206381,1159.0153789520264,833.0086542765299,1159.0153789520264,858.4491882324219,1159.0153789520264C883.8897221883138,1159.0153789520264,909.3302561442057,1159.0153789520264,934.6894098917643,1159.0153789520264C960.0485636393229,1159.0153789520264,985.3263371785482,1159.0153789520264,1010.6041107177734,1159.0153789520264C1035.8818842569988,1159.0153789520264,1061.1596577962239,1159.0153789520264,1077.9652112325032,1159.0153789520264C1094.7707646687825,1159.0153789520264,1103.104098002116,1159.0153789520264,1122.06894048055,1120.9508226712544C1141.0337829589844,1082.8862663904827,1170.6301345825195,1006.7571538289388,1185.428310394287,968.6925975481669L1200.2264862060547,930.628041267395" id="L-WEB4-NFS" class=" edge-thickness-normal edge-pattern-dotted flowchart-link LS-WEB4 LE-NFS" style="fill:none;stroke-width:2px;stroke-dasharray:3;" marker-start="url(#flowchart-circleStart)" marker-end="url(#flowchart-circleEnd)"></path><path d="M73.6640625,682.3255376815796L77.83072916666667,682.3255376815796C81.99739583333333,682.3255376815796,90.33072916666667,682.3255376815796,98.6640625,682.3255376815796C106.99739583333333,682.3255376815796,115.33072916666667,682.3255376815796,123.6640625,682.3255376815796C131.99739583333334,682.3255376815796,140.33072916666666,682.3255376815796,144.49739583333334,682.3255376815796L148.6640625,682.3255376815796" id="L-U-I" class=" edge-thickness-normal edge-pattern-solid flowchart-link LS-U LE-I" style="fill:none;" marker-start="url(#flowchart-circleStart)" marker-end="url(#flowchart-circleEnd)"></path></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default default" id="flowchart-ES1-77" transform="translate(1482.4465255737305, 64.66665458679199)"><rect rx="21.666656494140625" ry="21.666656494140625" x="-68.43098449707031" y="-21.666656494140625" width="136.86196899414062" height="43.33331298828125"></rect><g class="label" style="" transform="translate(-55.514320373535156, -14.166656494140625)"><foreignObject width="111.02864074707031" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>Elasticsearch</span></div></foreignObject></g></g><g class="node default default" id="flowchart-ES2-78" transform="translate(1482.4465255737305, 157.99996376037598)"><rect rx="21.666656494140625" ry="21.666656494140625" x="-68.43098449707031" y="-21.666656494140625" width="136.86196899414062" height="43.33331298828125"></rect><g class="label" style="" transform="translate(-55.514320373535156, -14.166656494140625)"><foreignObject width="111.02864074707031" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>Elasticsearch</span></div></foreignObject></g></g><g class="node default default" id="flowchart-ES3-79" transform="translate(1482.4465255737305, 251.33327293395996)"><rect rx="21.666656494140625" ry="21.666656494140625" x="-68.43098449707031" y="-21.666656494140625" width="136.86196899414062" height="43.33331298828125"></rect><g class="label" style="" transform="translate(-55.514320373535156, -14.166656494140625)"><foreignObject width="111.02864074707031" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>Elasticsearch</span></div></foreignObject></g></g><g class="node default default" id="flowchart-A3-76" transform="translate(1200.2264862060547, 141.15313911437988)"><polygon points="57.47394561767578,0 114.94789123535156,-57.47394561767578 57.47394561767578,-114.94789123535156 0,-57.47394561767578" class="label-container" transform="translate(-57.47394561767578,57.47394561767578)"></polygon><g class="label" style="" transform="translate(-28.307289123535156, -14.166656494140625)"><foreignObject width="56.61457824707031" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>output</span></div></foreignObject></g></g><g class="node default default" id="flowchart-A2-75" transform="translate(1010.6041107177734, 141.15313911437988)"><polygon points="50.83332061767578,0 101.66664123535156,-50.83332061767578 50.83332061767578,-101.66664123535156 0,-50.83332061767578" class="label-container" transform="translate(-50.83332061767578,50.83332061767578)"></polygon><g class="label" style="" transform="translate(-21.666664123535156, -14.166656494140625)"><foreignObject width="43.33332824707031" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>filter</span></div></foreignObject></g></g><g class="node default default" id="flowchart-A1-74" transform="translate(858.4491882324219, 141.15313911437988)"><polygon points="51.32160186767578,0 102.64320373535156,-51.32160186767578 51.32160186767578,-102.64320373535156 0,-51.32160186767578" class="label-container" transform="translate(-51.32160186767578,51.32160186767578)"></polygon><g class="label" style="" transform="translate(-22.154945373535156, -14.166656494140625)"><foreignObject width="44.30989074707031" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>input</span></div></foreignObject></g></g><g class="node default S" id="flowchart-WS1-49" transform="translate(355.75389862060547, 485.405011177063)"><rect rx="35.833343505859375" ry="35.833343505859375" x="-58.34635543823242" y="-35.833343505859375" width="116.69271087646484" height="71.66668701171875"></rect><g class="label" style="" transform="translate(-41.88801956176758, -28.333343505859375)"><foreignObject width="83.77603912353516" height="56.66668701171875"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>nginx-php<br>service</span></div></foreignObject></g></g><g class="node default S" id="flowchart-WS2-50" transform="translate(355.75389862060547, 870.5080623626709)"><rect rx="35.833343505859375" ry="35.833343505859375" x="-72.77994537353516" y="-35.833343505859375" width="145.5598907470703" height="71.66668701171875"></rect><g class="label" style="" transform="translate(-56.32160949707031, -28.333343505859375)"><foreignObject width="112.64321899414062" height="56.66668701171875"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>nginx-tomcat<br>service</span></div></foreignObject></g></g><g class="node default I" id="flowchart-I-51" transform="translate(190.81900787353516, 682.3255376815796)"><rect rx="21.666656494140625" ry="21.666656494140625" x="-42.154945373535156" y="-21.666656494140625" width="84.30989074707031" height="43.33331298828125"></rect><g class="label" style="" transform="translate(-29.23828125, -14.166656494140625)"><foreignObject width="58.4765625" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>ingress</span></div></foreignObject></g></g><g class="node default S" id="flowchart-PS1-57" transform="translate(685.4544105529785, 602.727222442627)"><rect rx="35.833343505859375" ry="35.833343505859375" x="-46.42578125" y="-35.833343505859375" width="92.8515625" height="71.66668701171875"></rect><g class="label" style="" transform="translate(-29.967445373535156, -28.333343505859375)"><foreignObject width="59.93489074707031" height="56.66668701171875"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>php<br>service</span></div></foreignObject></g></g><g class="node default Pod" id="flowchart-WEB1-55" label-offset-y="8.130666578366249" transform="translate(558.6575393676758, 391.33327293395996)"><path d="M 0,8.130666578366249 a 30.123695373535156,8.130666578366249 0,0,0 60.24739074707031 0 a 30.123695373535156,8.130666578366249 0,0,0 -60.24739074707031 0 l 0,51.463979566647495 a 30.123695373535156,8.130666578366249 0,0,0 60.24739074707031 0 l 0,-51.463979566647495" transform="translate(-30.123695373535156,-33.86265636169)"></path><g class="label" style="" transform="translate(-22.623695373535156, -14.166656494140625)"><foreignObject width="45.24739074707031" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>nginx</span></div></foreignObject></g></g><g class="node default Pod" id="flowchart-WEB2-56" label-offset-y="8.130666578366249" transform="translate(558.6575393676758, 614.7276878356934)"><path d="M 0,8.130666578366249 a 30.123695373535156,8.130666578366249 0,0,0 60.24739074707031 0 a 30.123695373535156,8.130666578366249 0,0,0 -60.24739074707031 0 l 0,51.463979566647495 a 30.123695373535156,8.130666578366249 0,0,0 60.24739074707031 0 l 0,-51.463979566647495" transform="translate(-30.123695373535156,-33.86265636169)"></path><g class="label" style="" transform="translate(-22.623695373535156, -14.166656494140625)"><foreignObject width="45.24739074707031" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>nginx</span></div></foreignObject></g></g><g class="node default S" id="flowchart-PS2-61" transform="translate(685.4544105529785, 1002.0129299163818)"><rect rx="35.833343505859375" ry="35.833343505859375" x="-46.673179626464844" y="-35.833343505859375" width="93.34635925292969" height="71.66668701171875"></rect><g class="label" style="" transform="translate(-30.21484375, -28.333343505859375)"><foreignObject width="60.4296875" height="56.66668701171875"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>tomcat<br>service</span></div></foreignObject></g></g><g class="node default Pod" id="flowchart-WEB3-59" label-offset-y="8.130666578366249" transform="translate(558.6575393676758, 774.3389568328857)"><path d="M 0,8.130666578366249 a 30.123695373535156,8.130666578366249 0,0,0 60.24739074707031 0 a 30.123695373535156,8.130666578366249 0,0,0 -60.24739074707031 0 l 0,51.463979566647495 a 30.123695373535156,8.130666578366249 0,0,0 60.24739074707031 0 l 0,-51.463979566647495" transform="translate(-30.123695373535156,-33.86265636169)"></path><g class="label" style="" transform="translate(-22.623695373535156, -14.166656494140625)"><foreignObject width="45.24739074707031" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>nginx</span></div></foreignObject></g></g><g class="node default Pod" id="flowchart-WEB4-60" label-offset-y="8.130666578366249" transform="translate(558.6575393676758, 1037.4296016693115)"><path d="M 0,8.130666578366249 a 30.123695373535156,8.130666578366249 0,0,0 60.24739074707031 0 a 30.123695373535156,8.130666578366249 0,0,0 -60.24739074707031 0 l 0,51.463979566647495 a 30.123695373535156,8.130666578366249 0,0,0 60.24739074707031 0 l 0,-51.463979566647495" transform="translate(-30.123695373535156,-33.86265636169)"></path><g class="label" style="" transform="translate(-22.623695373535156, -14.166656494140625)"><foreignObject width="45.24739074707031" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>nginx</span></div></foreignObject></g></g><g class="node default Pod" id="flowchart-PHP1-63" label-offset-y="7.002249718785152" transform="translate(1010.6041107177734, 458.50088691711426)"><path d="M 0,7.002249718785152 a 24.31640625,7.002249718785152 0,0,0 48.6328125 0 a 24.31640625,7.002249718785152 0,0,0 -48.6328125 0 l 0,50.3355627070664 a 24.31640625,7.002249718785152 0,0,0 48.6328125 0 l 0,-50.3355627070664" transform="translate(-24.31640625,-32.17003107231835)"></path><g class="label" style="" transform="translate(-16.81640625, -14.166656494140625)"><foreignObject width="33.6328125" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>PHP</span></div></foreignObject></g></g><g class="node default vPod" id="flowchart-PHP2-64" label-offset-y="7.002249718785152" transform="translate(1010.6041107177734, 572.8361148834229)"><path d="M 0,7.002249718785152 a 24.31640625,7.002249718785152 0,0,0 48.6328125 0 a 24.31640625,7.002249718785152 0,0,0 -48.6328125 0 l 0,50.3355627070664 a 24.31640625,7.002249718785152 0,0,0 48.6328125 0 l 0,-50.3355627070664" transform="translate(-24.31640625,-32.17003107231835)"></path><g class="label" style="" transform="translate(-16.81640625, -14.166656494140625)"><foreignObject width="33.6328125" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>PHP</span></div></foreignObject></g></g><g class="node default vPod" id="flowchart-PHP3-65" label-offset-y="7.002249718785152" transform="translate(1010.6041107177734, 687.1713428497314)"><path d="M 0,7.002249718785152 a 24.31640625,7.002249718785152 0,0,0 48.6328125 0 a 24.31640625,7.002249718785152 0,0,0 -48.6328125 0 l 0,50.3355627070664 a 24.31640625,7.002249718785152 0,0,0 48.6328125 0 l 0,-50.3355627070664" transform="translate(-24.31640625,-32.17003107231835)"></path><g class="label" style="" transform="translate(-16.81640625, -14.166656494140625)"><foreignObject width="33.6328125" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>PHP</span></div></foreignObject></g></g><g class="node default Pod" id="flowchart-TM1-67" label-offset-y="9.408497368933931" transform="translate(1010.6041107177734, 845.1183605194092)"><path d="M 0,9.408497368933931 a 37.71484375,9.408497368933931 0,0,0 75.4296875 0 a 37.71484375,9.408497368933931 0,0,0 -75.4296875 0 l 0,52.74181035721518 a 37.71484375,9.408497368933931 0,0,0 75.4296875 0 l 0,-52.74181035721518" transform="translate(-37.71484375,-35.77940254754152)"></path><g class="label" style="" transform="translate(-30.21484375, -14.166656494140625)"><foreignObject width="60.4296875" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>tomcat</span></div></foreignObject></g></g><g class="node default vPod" id="flowchart-TM2-68" label-offset-y="9.408497368933931" transform="translate(1010.6041107177734, 966.677167892456)"><path d="M 0,9.408497368933931 a 37.71484375,9.408497368933931 0,0,0 75.4296875 0 a 37.71484375,9.408497368933931 0,0,0 -75.4296875 0 l 0,52.74181035721518 a 37.71484375,9.408497368933931 0,0,0 75.4296875 0 l 0,-52.74181035721518" transform="translate(-37.71484375,-35.77940254754152)"></path><g class="label" style="" transform="translate(-30.21484375, -14.166656494140625)"><foreignObject width="60.4296875" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>tomcat</span></div></foreignObject></g></g><g class="node default vPod" id="flowchart-TM3-69" label-offset-y="9.408497368933931" transform="translate(1010.6041107177734, 1088.235975265503)"><path d="M 0,9.408497368933931 a 37.71484375,9.408497368933931 0,0,0 75.4296875 0 a 37.71484375,9.408497368933931 0,0,0 -75.4296875 0 l 0,52.74181035721518 a 37.71484375,9.408497368933931 0,0,0 75.4296875 0 l 0,-52.74181035721518" transform="translate(-37.71484375,-35.77940254754152)"></path><g class="label" style="" transform="translate(-30.21484375, -14.166656494140625)"><foreignObject width="60.4296875" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>tomcat</span></div></foreignObject></g></g><g class="node default default" id="flowchart-kk-84" label-offset-y="9.05103668261563" transform="translate(1661.3462600708008, 129.23695468902588)"><path d="M 0,9.05103668261563 a 35.46875,9.05103668261563 0,0,0 70.9375 0 a 35.46875,9.05103668261563 0,0,0 -70.9375 0 l 0,52.38434967089688 a 35.46875,9.05103668261563 0,0,0 70.9375 0 l 0,-52.38434967089688" transform="translate(-35.46875,-35.24321151806407)"></path><g class="label" style="" transform="translate(-27.96875, -14.166656494140625)"><foreignObject width="55.9375" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>kibana</span></div></foreignObject></g></g><g class="node default NFS" id="flowchart-NFS-95" transform="translate(1200.2264862060547, 930.628041267395)"><polygon points="10.833328247070312,0 116.74478149414062,0 127.57810974121094,-21.666656494140625 116.74478149414062,-43.33331298828125 10.833328247070312,-43.33331298828125 0,-21.666656494140625" class="label-container" transform="translate(-63.78905487060547,21.666656494140625)"></polygon><g class="label" style="" transform="translate(-45.455726623535156, -14.166656494140625)"><foreignObject width="90.91145324707031" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>NFS Server</span></div></foreignObject></g></g><g class="node default User" id="flowchart-U-96" transform="translate(40.83203125, 682.3255376815796)"><circle rx="0" ry="0" r="32.83203125" width="65.6640625" height="43.33331298828125"></circle><g class="label" style="" transform="translate(-25.33203125, -14.166656494140625)"><foreignObject width="50.6640625" height="28.33331298828125"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span>Client</span></div></foreignObject></g></g></g></g></g></svg></div><p>&nbsp;</p><h1><a name="二私有镜像仓库harbor" class="md-header-anchor"></a><span>二、私有镜像仓库Harbor</span></h1><h4><a name="1私有镜像仓库优点" class="md-header-anchor"></a><span>1、私有镜像仓库优点</span></h4><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="shell"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="shell"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 3.99377px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-number">1</span>）节省网络带宽，针对于每个镜像不用每个人都去中央仓库上面去下载，只需要从私有仓库中下载即可；</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-number">2</span>）提供镜像资源利用，针对于公司内部使用的镜像，推送到本地私有仓库中，以供公司内部相关人员使用。</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">VMware公司开源了企业级Registry项目Harbor，目标是帮助用户迅速搭建一个企业级的Docker registry 服务。</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 76px;"></div><div class="CodeMirror-gutters" style="display: none; height: 76px;"></div></div></div></pre><h4><a name="2环境准备" class="md-header-anchor"></a><span>2、环境准备</span></h4><figure><table><thead><tr><th><span>主机名称</span></th><th><span>IP地址</span></th><th><span>规格</span></th><th><span>角色</span></th></tr></thead><tbody><tr><td><span>harbor</span></td><td><span>192.168.1.100</span></td><td><span>2CPU/4G内存</span></td><td><span>Harbor私有镜像仓库</span></td></tr><tr><td><span>test</span></td><td><span>192.168.1.101</span></td><td><span>2CPU/4G内存</span></td><td><span>测试主机</span></td></tr></tbody></table></figure><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="shell"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="shell"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 3.60001px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。Harbor的每个组件都是以Docker容器的形式构建的，所以使用Docker Compose来对它进行部署</span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 50px;"></div><div class="CodeMirror-gutters" style="display: none; height: 50px;"></div></div></div></pre><h6><a name="11-部署私有镜像仓库harbor" class="md-header-anchor"></a><span>1.1 部署私有镜像仓库harbor</span></h6><p><span>连接harbor主机</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="shell"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="shell"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 3.60001px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@jumpserver ~]<span class="cm-comment"># ssh k8s@192.168.1.252 -p2222</span></span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 25px;"></div><div class="CodeMirror-gutters" style="display: none; height: 25px;"></div></div></div></pre><p><span>输入p，显示有权限的机器</span></p><p><img src="images/image-20220904133520145.png" referrerpolicy="no-referrer" alt="image-20220904133520145"></p><p><span>输入1，连接机器</span></p><p><img src="images/image-20220904133539535.png" referrerpolicy="no-referrer" alt="image-20220904133539535"></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="shell" style="break-inside: unset;"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="shell"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 3.60001px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><span><span>​</span>x</span></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">从1.252堡垒机拷贝harbor软件到1.100主机</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@jumpserver ~]<span class="cm-comment"># scp -r /root/5/project3/harbor/ 192.168.1.100:/root/</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">harbor主机开启路由转发</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[k8s@harbor ~]<span class="cm-def">$ sudo</span> <span class="cm-attribute">-s</span> </span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@harbor k8s]<span class="cm-comment"># echo 'net.ipv4.ip_forward = 1' &gt;&gt; /etc/sysctl.conf</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@harbor k8s]<span class="cm-comment"># sysctl -p</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">harbor主机安装docker服务，并启动</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@harbor k8s]<span class="cm-comment"># yum -y install docker-ce</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@harbor k8s]<span class="cm-comment"># systemctl enable --now docker</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">部署harbor</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@harbor k8s]<span class="cm-comment"># cd /root/harbor/</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@harbor harbor]<span class="cm-comment"># mv docker-compose /usr/sbin/</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@harbor harbor]<span class="cm-comment"># chmod +x /usr/sbin/docker-compose </span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@harbor harbor]<span class="cm-comment"># tar -xf harbor-offline-installer-v2.4.2.tgz  -C /usr/local/</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">修改配置文件</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@harbor harbor]<span class="cm-comment"># cd /usr/local/harbor</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" class="cm-tab-wrap-hack" style="padding-right: 0.1px;">[root@harbor harbor]<span class="cm-comment"># cp harbor.yml.tmpl harbor.yml<span class="cm-tab" role="presentation" cm-text="	"> </span><span class="cm-tab" role="presentation" cm-text="	">    </span>#拷贝harbor配置文件</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" class="cm-tab-wrap-hack" style="padding-right: 0.1px;">[root@harbor harbor]<span class="cm-comment"># vim harbor.yml<span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span></span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-number">5</span> hostname: harbor<span class="cm-tab" role="presentation" cm-text="	">  </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-comment">#访问harbor管理界面地址，写成主机名，后面做主机名解析</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-comment">#以下配置加上注释，否则需要证书</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" class="cm-tab-wrap-hack" style="padding-right: 0.1px;"> <span class="cm-number">13</span> <span class="cm-comment">#https:<span class="cm-tab" role="presentation" cm-text="	"> </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span>#加上注释</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> <span class="cm-number">14</span> &nbsp; <span class="cm-comment"># https port for harbor, default is 443</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" class="cm-tab-wrap-hack" style="padding-right: 0.1px;"> <span class="cm-number">15</span> &nbsp; <span class="cm-comment">#port: 443<span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span>#加上注释</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> <span class="cm-number">16</span> &nbsp; <span class="cm-comment"># The path of cert and key files for nginx</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" class="cm-tab-wrap-hack" style="padding-right: 0.1px;"> <span class="cm-number">17</span> &nbsp; <span class="cm-comment">#certificate: /your/certificate/path<span class="cm-tab" role="presentation" cm-text="	">  </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span>#加上注释</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" class="cm-tab-wrap-hack" style="padding-right: 0.1px;"> <span class="cm-number">18</span> &nbsp; <span class="cm-comment">#private_key: /your/private/key/path<span class="cm-tab" role="presentation" cm-text="	">  </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span>#加上注释</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">安装harbor</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@harbor harbor]<span class="cm-comment"># ./install.sh </span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">.......</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">✔ <span class="cm-attribute">----Harbor</span> has been installed and started successfully.----</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@harbor harbor]<span class="cm-comment"># ss -antpu | grep 80</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">tcp &nbsp;  LISTEN &nbsp; &nbsp; <span class="cm-number">0</span> <span class="cm-number">1024</span> &nbsp; [::]:80 &nbsp; &nbsp; [::]:*  users:((<span class="cm-string">"docker-proxy"</span><span class="cm-def">,pid</span><span class="cm-operator">=</span><span class="cm-number">15459</span><span class="cm-def">,fd</span><span class="cm-operator">=</span><span class="cm-number">4</span>))</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 966px;"></div><div class="CodeMirror-gutters" style="display: none; height: 966px;"></div></div></div></pre><h4><a name="3登录harbor" class="md-header-anchor"></a><span>3、登录harbor</span></h4><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="shell"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="shell"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 3.60001px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">另外购买一个新的公网IP，绑定到harbor主机</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">访问：http://公网IP地址:80，用户名：admin &nbsp;  密码：Harbor12345</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 50px;"></div><div class="CodeMirror-gutters" style="display: none; height: 50px;"></div></div></div></pre><p><span> </span><img src="images/image-20210810135510900.png" referrerpolicy="no-referrer" alt="image-20210810135510900"></p><p>&nbsp;</p><h4><a name="4制作镜像" class="md-header-anchor"></a><span>4、制作镜像</span></h4><h6><a name="11-tomcatfilebeat镜像" class="md-header-anchor"></a><span>1.1 tomcat、filebeat镜像</span></h6><p><span>退出harbor主机的登录，连接test主机</span></p><p><img src="images/image-20220904133310697.png" referrerpolicy="no-referrer" alt="image-20220904133310697"></p><p><img src="images/image-20220904133331443.png" referrerpolicy="no-referrer" alt="image-20220904133331443"></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="shell" style="break-inside: unset;"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="shell"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 3.60001px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">使用test主机测试，test主机安装docker软件</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[k8s@test ~]<span class="cm-def">$ sudo</span> <span class="cm-attribute">-s</span> </span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test k8s]<span class="cm-comment"># yum -y install docker-ce</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" class="cm-tab-wrap-hack" style="padding-right: 0.1px;">[root@test k8s]<span class="cm-comment"># vim /etc/hosts<span class="cm-tab" role="presentation" cm-text="	"> </span>#配置主机名解析</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-number">192</span>.168.1.100 harbor</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">更改配置文件,指定私有仓库地址</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test k8s]<span class="cm-comment"># mkdir /etc/docker</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test k8s]<span class="cm-comment"># vim /etc/docker/daemon.json</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">{</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-string">"exec-opts"</span>: [<span class="cm-string">"native.cgroupdriver=systemd"</span>],</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-string">"registry-mirrors"</span>: [<span class="cm-string">"http://harbor:80"</span>],</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-string">"insecure-registries"</span>:[<span class="cm-string">"harbor:80"</span>]</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">}</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test k8s]<span class="cm-comment"># systemctl enable --now docker</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" class="cm-tab-wrap-hack" style="padding-right: 0.1px;">[root@test k8s]<span class="cm-comment"># docker login http://harbor:80<span class="cm-tab" role="presentation" cm-text="	">  </span>#测试登录Harbor镜像仓库</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">Username: admin <span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-comment">#用户名</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">Password: Harbor12345 <span class="cm-tab" role="presentation" cm-text="	">  </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-comment">#密码</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">Login Succeeded</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-comment">#密码信息会存储在/root/.docker/config.json中</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">测试，在test主机导入镜像，上传至harbor主机，tomcat软件在2阶段</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@jumpserver ~]<span class="cm-comment"># scp /root/5/public/myos.tar.xz  apache-tomcat-9.0.6.tar.gz 192.168.1.101:/root/</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test k8s]<span class="cm-comment"># cd /root/</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test ~]<span class="cm-comment"># docker load  -i /root/myos.tar.xz </span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">制作tomcat镜像</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test ~]<span class="cm-comment"># mkdir tomcat</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test ~]<span class="cm-comment"># cd tomcat/</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test tomcat]<span class="cm-comment"># mv /root/apache-tomcat-9.0.6.tar.gz ./</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test tomcat]<span class="cm-comment"># vim Dockerfile </span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">FROM myos:v2009</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">RUN  yum install <span class="cm-attribute">-y</span> java-1.8.0-openjdk &amp;&amp; yum clean all</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">ADD  apache-tomcat-9.0.6.tar.gz /usr/local/</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">WORKDIR /usr/local/apache-tomcat-9.0.6/webapps</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">EXPOSE <span class="cm-number">8080</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">CMD [<span class="cm-string">"/usr/local/apache-tomcat-9.0.6/bin/catalina.sh"</span>, <span class="cm-string">"run"</span>]</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test tomcat]<span class="cm-comment"># docker build -t myos:tomcat .</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">测试镜像是否有问题</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test tomcat]<span class="cm-comment"># docker run -itd myos:tomcat </span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" class="cm-tab-wrap-hack" style="padding-right: 0.1px;">[root@test tomcat]<span class="cm-comment"># curl 172.17.0.2:8080<span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span>#可以正常访问</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">制作filebeat镜像并上传</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test tomcat]<span class="cm-comment"># mkdir /root/filebeat</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test tomcat]<span class="cm-comment"># cd /root/filebeat</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test filebeat]<span class="cm-comment"># scp 192.168.1.252:/root/5/elk/filebeat-6.8.8-x86_64.rpm ./</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test filebeat]<span class="cm-comment"># vim Dockerfile </span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">FROM myos:v2009</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">ADD  filebeat-6.8.8-x86_64.rpm  ./</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">RUN  yum <span class="cm-attribute">-y</span> install ./filebeat-6.8.8-x86_64.rpm</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">CMD  [<span class="cm-string">"/usr/share/filebeat/bin/filebeat"</span>, <span class="cm-string">"-c"</span>, <span class="cm-string">"/etc/filebeat/filebeat.yml"</span>, <span class="cm-string">"-path.home"</span>, <span class="cm-string">"/usr/share/filebeat"</span>, <span class="cm-string">"-path.config"</span>, <span class="cm-string">"/etc/filebeat"</span>, <span class="cm-string">"-path.data"</span>, <span class="cm-string">"/var/lib/filebeat"</span>, <span class="cm-string">"-path.logs"</span>, <span class="cm-string">"/var/log/filebeat"</span>]</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">制作镜像</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test filebeat]<span class="cm-comment"># docker build -t myos:filebeat .</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" class="cm-tab-wrap-hack" style="padding-right: 0.1px;">[root@test filebeat]<span class="cm-comment"># docker run -itd myos:filebeat <span class="cm-tab" role="presentation" cm-text="	">    </span></span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test filebeat]<span class="cm-comment"># docker ps  | grep filebeat &nbsp; #查看是否启动</span></span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 1595px;"></div><div class="CodeMirror-gutters" style="display: none; height: 1595px;"></div></div></div></pre><h6><a name="12-打标签上传镜像" class="md-header-anchor"></a><span>1.2 打标签上传镜像</span></h6><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="shell"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="shell"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 3.60001px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test filebeat]<span class="cm-comment"># docker tag myos:filebeat harbor:80/library/myos:filebeat</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test filebeat]<span class="cm-comment"># docker tag myos:tomcat harbor:80/library/myos:tomcat</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test filebeat]<span class="cm-comment"># docker tag myos:nginx harbor:80/library/myos:nginx</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test filebeat]<span class="cm-comment"># docker tag myos:phpfpm harbor:80/library/myos:phpfpm</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test filebeat]<span class="cm-comment"># docker push harbor:80/library/myos:filebeat</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test filebeat]<span class="cm-comment"># docker push harbor:80/library/myos:tomcat</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test filebeat]<span class="cm-comment"># docker push harbor:80/library/myos:nginx</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test filebeat]<span class="cm-comment"># docker push harbor:80/library/myos:phpfpm </span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">登录harbor查看，可以看到上传的镜像</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 252px;"></div><div class="CodeMirror-gutters" style="display: none; height: 252px;"></div></div></div></pre><h6><a name="13-测试下载镜像" class="md-header-anchor"></a><span>1.3 测试下载镜像</span></h6><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="shell"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="shell"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 3.60001px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">将系统中目前有的镜像文件删除, 从私有镜像仓库中下载镜像</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test filebeat]<span class="cm-comment"># docker rmi harbor:80/library/myos:nginx</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test filebeat]<span class="cm-comment"># docker pull harbor:80/library/myos:nginx </span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@test filebeat]<span class="cm-comment"># docker images</span></span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 101px;"></div><div class="CodeMirror-gutters" style="display: none; height: 101px;"></div></div></div></pre><p><span>明确的看到该镜像的下载次数为1</span></p><p><img src="images/image-20220809133306311.png" referrerpolicy="no-referrer" alt="image-20220809133306311"></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="shell"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="shell"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 3.60001px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">如果harbor停止了，可以通过堡垒机jumpserver连接harbor</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">使用如下命令启动</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[k8s@harbor ~]<span class="cm-def">$ sudo</span> <span class="cm-attribute">-s</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@harbor k8s]<span class="cm-comment"># cd /usr/local/harbor/</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">[root@harbor harbor]<span class="cm-comment"># docker-compose up -d</span></span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 126px;"></div><div class="CodeMirror-gutters" style="display: none; height: 126px;"></div></div></div></pre><p>&nbsp;</p></div>
</body>
</html>